草庐IT

C++ operator+ 和 operator+= 重载

全部标签

c++ - 运算符重载 C++, (+, -, *,/etc.) 有没有比复制、替换和粘贴更聪明的方法?

我正在编写一种矩阵库,所以我使用运算符重载为矩阵提供了一个operator+。它看起来像这样。friendmatrixoperator+(constmatrix&Input_1,constmatrix&Input_2){matrixOutput;for(inti=0;i据我测试,它是有效的。现在我也想添加-、/、*运算符,它们的工作原理都是一样的。当然我可以使用复制、替换和粘贴。但这不利于可读性和可维护性。有没有更聪明的解决方案,也许还有一个概念,因为我不知道用谷歌搜索它的概念名称?我刚发现如何重载单个运算符。 最佳答案 您可以使用

c++ - 在 C++ 中重载 "+"orerator 时 that.vect.push_back(0) 和 that.vect.begin() 出错

classPolinom{public:std::vectorvect;Polinomoperator+(constPolinom&that){if(this->vect.size()>that.vect.size()){for(inti=that.vect.size();ivect.size();i++)that.vect.push_back(0);//here}elseif(that.vect.size()>this->vect.size()){for(inti=this->vect.size();ivect.push_back(0);}std::vectorsum;std::ve

c++ - 二维矩阵和重载运算符()/丑陋的语法

我在我的一个项目中使用二维矩阵。这类似于C++FAQLite中的建议.巧妙的是你可以像这样使用它:intmain(){Matrixm(10,10);m(5,8)=106.15;std::cout现在,我有一个由顶点组成的图,每个顶点都有一个公共(public)(只是为了简化示例)指针,指向上面的二维矩阵。现在我确实有一个非常丑陋的语法来访问它。(*sampleVertex.some2DTable)(0,0)=0;//badsampleVertex.some2DTable->operator()(0,0)=0;//evenworse...可能由于我对运算符重载缺乏经验,我在这里遗漏了一些

c++ - 你能用重载的 bool() 计算对 boolean 的构造函数调用吗?

如果bool()运算符重载,构造函数调用是否可以评估为bool值?classA{public:A(){};operatorbool()const{returntrue;}}main(){if(Aa=A()){//dostuff}}上面的代码是否有效,或者我是否需要像这样实现main:intmain(intargc,constchar*argv[]){Aa();if(a){//dostuff}}这段代码将在我的代码库中到处都是,因此减少行数、提高易读性和缩小范围很重要,并且会因此得到改进。有什么想法吗? 最佳答案 该代码包含一些句法和

c++ - 将调用哪个重载版本的运算符

假设我在一个类中声明了下标运算符char&operator[](intindex);constcharoperator[](intindex)const;在什么情况下调用第二次重载。是否仅通过const对象调用。以下场景会调用哪个版本的operator。constcharres1=nonConstObject[10];nonConstObject[10]; 最佳答案 第一个被调用。不要被返回值弄糊涂了;只有参数被认为是选择方法。在这种情况下,隐式this是非常量,因此调用非常量版本。 关

c++ - 在 C++ 中重载 + 运算符时第一个参数是字符串的问题

我有一个自制的字符串类://String.hString&operator=(constString&);String&operator=(char*);constStringoperator+(String&s);constStringoperator+(char*sA);..//inmain:Strings1("hi");Strings2("hello");str2=str1+"ok";//thisisoktodostr2="ok"+str1;//butnotthisway//Shouldn'titautomaticallydetectthatoneargumentisastrin

c++ - "No match for operator="试图在 C++ 中遍历映射

我正在尝试遍历定义如下的map:std::map>ridx_;现在我尝试在以下重载运算符的友元函数中遍历ridx_(它是一个类的私有(private)成员)std::ostream&operator>::iteratorit;//Thefollowingisline34for(it=m.ridx_.begin();it!=m.ridx_.end();it++)osfirst但是g++错误输出:SMatrix.cpp:34:error:nomatchfor'operator='in'it=m->SMatrix::ridx_.std::map::beginwith_Key=unsigned

c++ - std::map 的 int 类型比较的 operator< 重载? (我希望它按降序排序..)

我遇到了一个问题,我想定义一个map,它在内部按第一个的降序排序。如果第一个不是主要类型,比如它是一个类,我可以在该类中重载“非常感谢!! 最佳答案 添加比较器:#includemap>m;默认为less. 关于c++-std::map的int类型比较的operator https://stackoverflow.com/questions/8659744/

c++ - 在模板类上重载 << 运算符

我已经为链表中的节点制作了一个模板类,我试图通过重载#includeusingnamespacestd;templateclassNode;templateclassNode{private:voiddeletePointer(NType*p);public:NTypedata;Node*prev,*next;templatestructis_pointer{staticconstboolvalue=false;};templatestructis_pointer{staticconstboolvalue=true;};Node();Node(NTypedata);~Node();};

C++运算符重载和多态性

多态性和运算符重载混合在一起了吗?没有指针就无法实现多态性,如thisanswer中所述。而且你不能像解释的那样用指针重载运算符here.所以真的没有办法做到这一点,对吧? 最佳答案 是的。您没有正确阅读答案。这是一个简短的演示:#includeusingnamespacestd;structX{intvalue;virtualvoidoperator+=(intx){value+=x;}};structY:X{virtualvoidoperator+=(intx){value*=x;}};voiddo_stuff(X&x){x+=